﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ITProject.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using System.IO;
using ITProject.Repository.Abstract;

namespace ITProject.WebUI.Models.Account
{
    public class UserInformationViewModel:BaseViewModel
    {
        /// <summary>
        /// ViewModel z informacjami o uzytkowniku
        /// Natalia Wyczislok
        /// </summary>
        /// 
        
        [Display(Name = "Nowe hasło")]
        public string NewPassword { get; set; }
        public string AvatarName { get; set; }
        public bool AvatarDelete { get; set; }
        [Display(Name = "Stare hasło")]
        public string OldPassword { get; set; }
        [Display(Name = "Powtórz nowe hasło")]
        public string PasswordNew2 { get; set; }
        [Required]
        [Display(Name = "Imię")]
        [MaxLength(30, ErrorMessage="Za długie imię")]
        public string FirstName { get; set; }
        [Required]
        [Display(Name = "Naziwsko")]
        [MaxLength(30, ErrorMessage = "Za długie nazwisko")]
        public string LastName { get; set; }
        [Required]
        [Display(Name = "Data urodzenia")]
        public DateTime BirthDate { get; set; }
        [Required]
        [Display(Name = "Email")]
        [MaxLength(30, ErrorMessage = "Za długi adres email")]
        [RegularExpression(@"^[_A-Za-z0-9-]+@[A-Za-z0-9]+.[A-Za-z0-9]{2,}", ErrorMessage = "Zły format adresu email")]
        public string Email { get; set; }
        [Display(Name = "Awatar")]
        public HttpPostedFileBase AvatarPath { get; set; }
        [MaxLength(600, ErrorMessage = "Pole zainteresowania może mieć maksymalnie 600 znaków")]
        [Display(Name = "Zainteresowania")]
        public string Interest { get; set; }
        [Display(Name = "O Sobie")]
        [MaxLength(600, ErrorMessage = "Pole O Sobie może mieć maksymalnie 600 znaków")]
        public string About { get; set; }
        [Display(Name = "Doświadczenie")]
        [MaxLength(600, ErrorMessage = "Pole doświadczenie może mieć maksymalnie 600 znaków")]
        public string Experience { get; set; }
        [Display(Name = "Umiejętności")]
        [MaxLength(600, ErrorMessage = "Pole umiejętności może mieć maksymalnie 600 znaków")]
        public string Skills { get; set; }
        [Display(Name = "Kraj")]
        [MaxLength(20, ErrorMessage="Za długa nazwa kraju")]
        public string Country { get; set; }
        [Display(Name = "Miasto")]
        [MaxLength(30, ErrorMessage = "Za długa nazwa miasta")]
        public string City { get; set; }
        /// <summary>
        /// Funkcja dokonuje konwersji userinformationviewmodel na krotki encji user
        /// Natalia Wyczisok
        /// </summary>
        /// <returns>krotka encji user</returns>
        public User ConvertToUser()
        {
            User user = new User();
            user.LastName = this.LastName;
            user.FirstName = this.FirstName;
            user.BirthDate = this.BirthDate;
            user.Email = this.Email;
            user.Password = this.NewPassword;

            return user;

        }
        /// <summary>
        /// Funkcja dokonuje konwersji userinformationviewmodel na krotki encji profil
        /// Natalia Wyczisok
        /// </summary>
        /// <param name="filename">podajemy nazwe avatara wygenerowaną w kontrolerze</param>
        /// <returns>krotka encji profil</returns>
        public Profil ConvertToProfil()
        {
            Profil profil = new Profil();
            profil.About = this.About;
            profil.AvatarPath = this.AvatarName;
            profil.City = this.City;
            profil.Country = this.Country;
            profil.Experience = this.Experience;
            profil.Interest = this.Interest;
            profil.Skills = this.Skills;
            return profil;
        }
        /// <summary>
        /// Statyczna metoda która dokonuje konwersji krotki encji User i Profil na instancje modelu UserInformation
        /// </summary>
        /// <param name="user">krotka encji user</param>
        /// <param name="profil">krotka encji profil</param>
        /// <returns>instancja encji UserInformation</returns>
        public static UserInformationViewModel Convert(User user, Profil profil)
        {
            UserInformationViewModel m = new UserInformationViewModel();
            m.BirthDate = user.BirthDate;
            m.Email = user.Email;
            m.FirstName = user.FirstName;
            m.LastName = user.LastName;
            if (profil != null)
            {
                m.About = profil.About;
                m.City = profil.City;
                m.Country = profil.Country;
                m.Experience = profil.Experience;
                m.Interest = profil.Interest;
                m.Skills = profil.Skills;
                m.AvatarName = profil.AvatarPath;
            }
            m.AvatarDelete = false;
            return m;
        }
        /// <summary>
        /// Dane dotycznące dopuszczalnej wielkosci avatarów
        /// </summary>
        private static readonly int AvatarWidth = 100;
        private static readonly int AvatarHeight = 130;
        public static int MaxAvatarWidth
        {
            get { return AvatarWidth; }
        }
        public static int MaxAvatarHeight
        {
            get { return AvatarHeight; }
        }


        
    }
}